package com.zcx.base;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.zcx.common.Helper;

/**
 * @author：zcx
 * @date:on 2018/2/28 0028 15:46
 * 说明:BaseActivity中对Presenter进行了绑定和解除绑定的操作，
 * 这是为了避免我们在异步获取网络数据时，用户点击了返回键，
 * 此时的Activity就执行了onDestroy方法，但是在Presenter中仍然持有VIew的引用，造成不能及时的回收，从而引起内存溢出。
 *
 *　所以在onDestroy中进行解绑是很必要的，同时在Presenter中引用的VIew使用弱引用，避免内存溢出。
 */

public abstract class BaseActivity<V extends BaseView,P extends BasePresenter> extends AppCompatActivity {

    private P basePresenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        basePresenter = setPresenter();
        if(Helper.isNotNull(basePresenter)) {
            basePresenter.attachView(getMvpView());
        }
        onCreateView(savedInstanceState);
        initView();
        initData();
    }
    protected abstract P setPresenter();
    protected V getMvpView() {
        return (V) this;
    }

    public P getBasePresenter() {
        return basePresenter;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (Helper.isNotNull(basePresenter)) {
            basePresenter.detachView();
        }
    }

    /**
     * onCreateView:初始化界面
     * @param savedInstanceState
     */
    protected abstract void onCreateView(Bundle savedInstanceState);

    protected void initView() {

    }
    protected void initData() {

    }
}
